home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #1 / Amiga Plus CD - 2000 - No. 1.iso / Tools / Dev / Sas-PPC / samplelib3 / out < prev    next >
Encoding:
Text File  |  1999-12-03  |  46.7 KB  |  940 lines

  1. SAS AMIGA 680x0OBJ Module Disassembler 6.57
  2. Copyright © 1995 SAS Institute, Inc.
  3.  
  4.  
  5. Amiga Object File Loader V1.00
  6. 68000 Instruction Set
  7.  
  8. EXTERNAL DEFINITIONS
  9.  
  10. __chkabort 0000-00    _CreatePPCTask 002A-00    ___libfpinit 0160-00    
  11. ___libfpterm 018A-00    __LibInit 01B4-00    __LibOpen 0346-00    
  12. __LibClose 04BA-00    __LibExpunge 053C-00    __OSERR 0068-01    
  13. ___base 006C-01    __StackPtr 0070-01    ___stack 0074-01    __ONEXIT 0078-01
  14. __WBenchMsg 007C-01    _WBenchMsg 0080-01    __LibInitTab 0000-02
  15.  
  16. SECTION 00 "text" 000005EC BYTES
  17. ;   1: #define  _USEOLDEXEC_ 1
  18. ;   2: #include <exec/types.h>
  19. ;   3: #include <exec/nodes.h>
  20. ;   4: #include <exec/memory.h>
  21. ;   5: #include <exec/resident.h>
  22. ;   6: #include <exec/libraries.h>
  23. ;   7: #include <exec/execbase.h>
  24. ;   8: #include <libraries/dos.h>
  25. ;   9: #include <proto/exec.h>
  26. ;  10: #include <proto/dos.h>
  27. ;  11: #include <string.h>
  28. ;  12: #include <dos/dostags.h>
  29. ;  13: #include <PowerUP/PPCLib/Interface.h>
  30. ;  14: #include <PowerUP/PPCLib/tasks.h>
  31. ;  15: #include <PowerUP/PPCLib/ppc.h>
  32. ;  16: #include <PowerUP/PPCLib/object.h>
  33. ;  17: #include <PowerUP/PPCDisslib/PPCDiss.h>
  34. ;  18: #include <PowerUP/pragmas/ppc_pragmas.h>
  35. ;  19: #include <PowerUP/clib/ppc_protos.h>
  36. ;  20: #include <PowerUP/pragmas/ppcdiss_pragmas.h>
  37. ;  21: #include <PowerUP/clib/ppcdiss_protos.h>
  38. ;  22: 
  39. ;  23: 
  40. ;  24: /* Prototypes */
  41. ;  25: ULONG __asm _LibExpunge( register __a6 struct MyLibrary *libbase );
  42. ;  26: ULONG __asm _LibInit   ( register __a0 APTR seglist,
  43. ;  27:                          register __d0 struct MyLibrary *libbase );
  44. ;  28: 
  45. ;  29: int  __saveds __asm __UserLibInit   (register __a6 struct MyLibrary *libbase);
  46. ;  30: void __saveds __asm __UserLibCleanup(register __a6 struct MyLibrary *libbase);
  47. ;  31: 
  48. ;  32: int  __saveds __asm __UserDevInit   (register __d0 long unit,
  49. ;  33:                                      register __a0 struct IORequest *ior,
  50. ;  34:                                      register __a6 struct MyLibrary *libbase);
  51. ;  35: void __saveds __asm __UserDevCleanup(register __a0 struct IORequest *ior,
  52. ;  36:                                      register __a6 struct MyLibrary *libbase);
  53. ;  37: 
  54. ;  38: int  __saveds __asm __libfpinit     (register __a6 struct MyLibrary *libbase);
  55. ;  39: void __saveds __asm __libfpterm     (register __a6 struct MyLibrary *libbase);
  56. ;  40: void __saveds __asm Set_ElfEntry    (register __a6 struct MyLibrary *libbase, 
  57. ;  41:                                      register __d0 long value);
  58. ;  42: 
  59. ;  43: struct MyLibrary {
  60. ;  44:         struct             Library ml_Lib;
  61. ;  45:         ULONG              ml_SegList;
  62. ;  46:         ULONG              ml_Flags;
  63. ;  47:         APTR               ml_ExecBase; /* pointer to exec base  */
  64. ;  48: #ifndef ONE_GLOBAL_SECTION
  65. ;  49:         long *             ml_relocs;   /* pointer to relocs.    */
  66. ;  50:         struct MyLibrary * ml_origbase; /* pointer to original library base  */
  67. ;  51:         long               ml_numjmps;
  68. ;  52: #endif
  69. ;  53:         void *             ml_MyObject; /* pointer to ELF Object */
  70. ;  54: 
  71. ;  55: };
  72. ;  56: 
  73. ;  57: typedef LONG (*myPFL)();   /* pointer to function returning 32-bit int      */
  74. ;  58: 
  75. ;  59: /* library initialization table, used for AUTOINIT libraries                */
  76. ;  60: struct InitTable {
  77. ;  61:         ULONG        *it_DataSize;       /* library data space size         */
  78. ;  62:         myPFL        *it_FuncTable;      /* table of entry points           */
  79. ;  63:         APTR         it_DataInit;        /* table of data initializers      */
  80. ;  64:         myPFL        it_InitFunc;        /* initialization function to run  */
  81. ;  65: };
  82. ;  66: 
  83. ;  67: #ifndef ONE_GLOBAL_SECTION
  84. ;  68: long _OSERR;
  85. ;  69: long __base;
  86. ;  70: #endif
  87. ;  71: 
  88. ;  72: /* symbols generated by blink */
  89. ;  73: extern char __far _LibID[];             /* ID string                        */
  90. ;  74: extern char __far _LibName[];           /* Name string                      */
  91. ;  75: extern char __far RESLEN;               /* size of init data                */
  92. ;  76: extern long __far NEWDATAL;             /* size of global data              */
  93. ;  77: extern long __far NUMJMPS;              /* number of jmp vectors to copy    */
  94. ;  78: extern myPFL _LibFuncTab[];             /* my function table                */
  95. ;  79: extern long __far _LibVersion;          /* Version of library               */
  96. ;  80: extern long __far _LibRevision;         /* Revision of library              */
  97. ;  81: 
  98. ;  82: long _StackPtr;
  99. ;  83: long __stack;
  100. ;  84: long __base;
  101. ;  85: long _ONEXIT;
  102. ;  86: struct WBStartup *_WBenchMsg;
  103. ;  87: struct WBStartup *WBenchMsg;
  104. ;  88: 
  105. ;  89: 
  106. ;  90: #define MYVERSION ((long)&_LibVersion)
  107. ;  91: #define MYREVISION ((long)&_LibRevision)
  108. ;  92: #define DATAWORDS ((long)&NEWDATAL)     /* magic to get right tpye of reloc */ 
  109. ;  93: #define SIZEJMPTAB ((long)libbase->ml_origbase->ml_numjmps)
  110. ;  94:                                         /* size in bytes of jmp table       */
  111. ;  95: 
  112. ;  96: /* From libent.o, needed to determine where data is loaded by loadseg       */
  113. ;  97: extern long far _Libmergeddata; 
  114. ;  98: 
  115. ;  99: #define MYLIBRARYSIZE ((sizeof(struct MyLibrary) +3) & ~3)
  116. ; 100: 
  117. ; 101: 
  118. ; 102: 
  119. ; 103: struct InitTable __far _LibInitTab =  {
  120. ; 104:         (long *)(&RESLEN+MYLIBRARYSIZE),
  121. ; 105:         _LibFuncTab,
  122. ; 106:         NULL,                        /* will initialize my own data */
  123. ; 107:         _LibInit,
  124. ; 108: };
  125. ; 109: 
  126. ; 110: 
  127. ; 111: int _chkabort(void)
  128.        | 0000  594F                           SUBQ.W      #4,A7
  129.        | 0002  2E8E                           MOVE.L      A6,(A7)
  130. ; 112: {
  131. ; 113:     return 0;
  132.        | 0004  7000                           MOVEQ       #00,D0
  133. ; 114: }
  134.        | 0006  584F                           ADDQ.W      #4,A7
  135.        | 0008  4E75                           RTS
  136.        | 000A  646F                           BCC.B       007B
  137.        | 000C  732E                           
  138.        | 000E  6C69                           BGE.B       0079
  139.        | 0010  6272                           BHI.B       0084
  140.        | 0012  6172                           BSR.B       0086
  141.        | 0014  7900                           
  142.        | 0016  7070                           MOVEQ       #70,D0
  143.        | 0018  632E                           BLS.B       0048
  144.        | 001A  6C69                           BGE.B       0085
  145.        | 001C  6272                           BHI.B       0090
  146.        | 001E  6172                           BSR.B       0092
  147.        | 0020  7900                           
  148.        | 0022  5F5F                           SUBQ.W      #7,(A7)+
  149.        | 0024  456E                           
  150.        | 0026  7472                           MOVEQ       #72,D2
  151.        | 0028  7900                           
  152. ; 115: 
  153. ; 116: 
  154. ; 117: 
  155. ; 118: 
  156. ; 119: int CreatePPCTask(struct MyLibrary *libbase, void *entry)
  157.        | 002A  514F                           SUBQ.W      #8,A7
  158.        | 002C  48E7 0136                      MOVEM.L     D7/A2-A3/A5-A6,-(A7)
  159.        | 0030  266F 0024                      MOVEA.L     0024(A7),A3
  160.        | 0034  2A6F 0020                      MOVEA.L     0020(A7),A5
  161.        | 0038  2F4E 0014                      MOVE.L      A6,0014(A7)
  162. ; 120: {
  163. ; 121:     static struct TagItem    MyTags[13];
  164. ; 122:     struct DOSLibrary *DOSBase;
  165. ; 123:     struct Library *PPCLibBase;
  166. ; 124:     long result;
  167. ; 125:     
  168. ; 126:     DOSBase = (void *)OpenLibrary("dos.library", 0);
  169.        | 003C  43FA FFCC                      LEA         FFCC(PC),A1
  170.        | 0040  7000                           MOVEQ       #00,D0
  171.        | 0042  2C78 0004                      MOVEA.L     0004,A6
  172.        | 0046  4EAE FDD8                      JSR         FDD8(A6)
  173.        | 004A  2440                           MOVEA.L     D0,A2
  174. ; 127:     if (DOSBase == NULL) return -1;
  175.        | 004C  200A                           MOVE.L      A2,D0
  176.        | 004E  2C6F 0014                      MOVEA.L     0014(A7),A6
  177.        | 0052  6606                           BNE.B       005A
  178.        | 0054  70FF                           MOVEQ       #FF,D0
  179.        | 0056  6000 0100                      BRA.W       0158
  180. ; 128: 
  181. ; 129:     if ((PPCLibBase = OpenLibrary("ppc.library",0)) == NULL)
  182.        | 005A  43FA FFBA                      LEA         FFBA(PC),A1
  183.        | 005E  7000                           MOVEQ       #00,D0
  184.        | 0060  2C78 0004                      MOVEA.L     0004,A6
  185.        | 0064  4EAE FDD8                      JSR         FDD8(A6)
  186.        | 0068  2F40 0018                      MOVE.L      D0,0018(A7)
  187.        | 006C  4A80                           TST.L       D0
  188.        | 006E  2C6F 0014                      MOVEA.L     0014(A7),A6
  189.        | 0072  6610                           BNE.B       0084
  190. ; 130:     {
  191. ; 131:         CloseLibrary((void *)DOSBase);
  192.        | 0074  224A                           MOVEA.L     A2,A1
  193.        | 0076  2C78 0004                      MOVEA.L     0004,A6
  194.        | 007A  4EAE FE62                      JSR         FE62(A6)
  195. ; 132:         return -1;
  196.        | 007E  70FF                           MOVEQ       #FF,D0
  197.        | 0080  6000 00D6                      BRA.W       0158
  198. ; 133:     }
  199. ; 134: 
  200. ; 135:     MyTags[0].ti_Tag    =    PPCTASKTAG_STOPTASK;
  201.        | 0084  297C 8002 0012  0000-01.2      MOVE.L      #80020012,01.00000000(A4)
  202. ; 136:     MyTags[0].ti_Data    =    FALSE;
  203.        | 008C  42AC  0004-01.2                CLR.L       01.00000004(A4)
  204. ; 137:     MyTags[1].ti_Tag    =    PPCTASKTAG_WAITFINISH;
  205.        | 0090  297C 8002 0031  0008-01.2      MOVE.L      #80020031,01.00000008(A4)
  206. ; 138:     MyTags[1].ti_Data    =    TRUE;
  207.        | 0098  7001                           MOVEQ       #01,D0
  208.        | 009A  2940  000C-01.2                MOVE.L      D0,01.0000000C(A4)
  209. ; 139:     MyTags[2].ti_Tag    =    PPCTASKTAG_INPUTHANDLE;
  210.        | 009E  297C 8002 000F  0010-01.2      MOVE.L      #8002000F,01.00000010(A4)
  211. ; 140:     MyTags[2].ti_Data    =    (ULONG) Input();
  212.        | 00A6  2C4A                           MOVEA.L     A2,A6
  213.        | 00A8  4EAE FFCA                      JSR         FFCA(A6)
  214.        | 00AC  2940  0014-01.2                MOVE.L      D0,01.00000014(A4)
  215. ; 141:     MyTags[3].ti_Tag    =    PPCTASKTAG_OUTPUTHANDLE;
  216.        | 00B0  297C 8002 0010  0018-01.2      MOVE.L      #80020010,01.00000018(A4)
  217. ; 142:     MyTags[3].ti_Data    =    (ULONG) Output();
  218.        | 00B8  2C4A                           MOVEA.L     A2,A6
  219.        | 00BA  4EAE FFC4                      JSR         FFC4(A6)
  220.        | 00BE  2940  001C-01.2                MOVE.L      D0,01.0000001C(A4)
  221. ; 143:     MyTags[4].ti_Tag    =    PPCTASKTAG_ARG1;
  222.        | 00C2  297C 8002 0003  0020-01.2      MOVE.L      #80020003,01.00000020(A4)
  223. ; 144:     MyTags[4].ti_Data    =    (ULONG) 0;
  224.        | 00CA  42AC  0024-01.2                CLR.L       01.00000024(A4)
  225. ; 145:     MyTags[5].ti_Tag    =    PPCTASKTAG_STACKSIZE;
  226.        | 00CE  297C 8002 000D  0028-01.2      MOVE.L      #8002000D,01.00000028(A4)
  227. ; 146:     MyTags[5].ti_Data    =    0x10000;
  228.        | 00D6  297C 0001 0000  002C-01.2      MOVE.L      #00010000,01.0000002C(A4)
  229. ; 147:     MyTags[6].ti_Tag    =    NP_CloseInput;
  230.        | 00DE  297C 8000 03EE  0030-01.2      MOVE.L      #800003EE,01.00000030(A4)
  231. ; 148:     MyTags[6].ti_Data    =    FALSE;
  232.        | 00E6  42AC  0034-01.2                CLR.L       01.00000034(A4)
  233. ; 149:     MyTags[7].ti_Tag    =    NP_CloseOutput;
  234.        | 00EA  297C 8000 03EF  0038-01.2      MOVE.L      #800003EF,01.00000038(A4)
  235. ; 150:     MyTags[7].ti_Data    =    FALSE;
  236.        | 00F2  42AC  003C-01.2                CLR.L       01.0000003C(A4)
  237. ; 151:     MyTags[8].ti_Tag    =    PPCTASKTAG_BREAKSIGNAL;
  238.        | 00F6  297C 8002 0019  0040-01.2      MOVE.L      #80020019,01.00000040(A4)
  239. ; 152:     MyTags[8].ti_Data    =    TRUE;
  240.        | 00FE  7001                           MOVEQ       #01,D0
  241.        | 0100  2940  0044-01.2                MOVE.L      D0,01.00000044(A4)
  242. ; 153:     MyTags[9].ti_Tag    =    PPCTASKTAG_ARG3;
  243.        | 0104  297C 8002 0005  0048-01.2      MOVE.L      #80020005,01.00000048(A4)
  244. ; 154:     MyTags[9].ti_Data    =    (ULONG) libbase;
  245.        | 010C  294D  004C-01.2                MOVE.L      A5,01.0000004C(A4)
  246. ; 155:     MyTags[10].ti_Tag    =    PPCTASKTAG_ARG4;
  247.        | 0110  297C 8002 0006  0050-01.2      MOVE.L      #80020006,01.00000050(A4)
  248. ; 156:     MyTags[10].ti_Data    =    (ULONG) entry;
  249.        | 0118  294B  0054-01.2                MOVE.L      A3,01.00000054(A4)
  250. ; 157:     MyTags[11].ti_Tag    =    PPCTASKTAG_ARG2;
  251.        | 011C  297C 8002 0004  0058-01.2      MOVE.L      #80020004,01.00000058(A4)
  252. ; 158:     MyTags[11].ti_Data    =    (ULONG) _WBenchMsg;
  253.        | 0124  296C  007C-01.2   005C-01.2    MOVE.L      01.0000007C(A4),01.0000005C(A4)
  254. ; 159: 
  255. ; 160:     MyTags[12].ti_Tag    =    TAG_END;
  256.        | 012A  42AC  0060-01.2                CLR.L       01.00000060(A4)
  257. ; 161: 
  258. ; 162:     CloseLibrary((void *)DOSBase);
  259.        | 012E  224A                           MOVEA.L     A2,A1
  260.        | 0130  2C78 0004                      MOVEA.L     0004,A6
  261.        | 0134  4EAE FE62                      JSR         FE62(A6)
  262. ; 163: 
  263. ; 164:     result =  (ULONG) PPCCreateTask(libbase->ml_MyObject,
  264. ; 165:                                     &MyTags[0]);
  265.        | 0138  206D 003A                      MOVEA.L     003A(A5),A0
  266.        | 013C  43EC  0000-01.2                LEA         01.00000000(A4),A1
  267.        | 0140  2C6F 0018                      MOVEA.L     0018(A7),A6
  268.        | 0144  4EAE FFAC                      JSR         FFAC(A6)
  269.        | 0148  2E00                           MOVE.L      D0,D7
  270. ; 166:                                      
  271. ; 167:     CloseLibrary(PPCLibBase);
  272.        | 014A  226F 0018                      MOVEA.L     0018(A7),A1
  273.        | 014E  2C78 0004                      MOVEA.L     0004,A6
  274.        | 0152  4EAE FE62                      JSR         FE62(A6)
  275. ; 168:     return result; 
  276.        | 0156  2007                           MOVE.L      D7,D0
  277. ; 169: 
  278. ; 170: }
  279.        | 0158  4CDF 6C80                      MOVEM.L     (A7)+,D7/A2-A3/A5-A6
  280.        | 015C  504F                           ADDQ.W      #8,A7
  281.        | 015E  4E75                           RTS
  282. ; 171: 
  283. ; 172: /* PPC functions that run the PPC autoinitializers */
  284. ; 173: extern int _fpinit(void);
  285. ; 174: extern int _fpterm(void);
  286. ; 175: 
  287. ; 176: int  __saveds __asm __libfpinit(register __a6 struct MyLibrary *libbase)
  288.        | 0160  594F                           SUBQ.W      #4,A7
  289.        | 0162  48E7 000E                      MOVEM.L     A4-A6,-(A7)
  290.        | 0166  2A4E                           MOVEA.L     A6,A5
  291.        | 0168  49EE  0000-XX.2                LEA         _LinkerDB(A6),A4
  292.        | 016C  2F4E 000C                      MOVE.L      A6,000C(A7)
  293. ; 177: {
  294. ; 178:     return CreatePPCTask(libbase, _fpinit);
  295.        | 0170  41FA  0000-XX.1                LEA         __fpinit(PC),A0
  296.        | 0174  2F08                           MOVE.L      A0,-(A7)
  297.        | 0176  2F0D                           MOVE.L      A5,-(A7)
  298.        | 0178  2C6F 0014                      MOVEA.L     0014(A7),A6
  299.        | 017C  6100 FEAC                      BSR.W       002A
  300.        | 0180  504F                           ADDQ.W      #8,A7
  301. ; 179: }
  302.        | 0182  4CDF 7000                      MOVEM.L     (A7)+,A4-A6
  303.        | 0186  584F                           ADDQ.W      #4,A7
  304.        | 0188  4E75                           RTS
  305. ; 180: 
  306. ; 181: void __saveds __asm __libfpterm(register __a6 struct MyLibrary *libbase)
  307.        | 018A  594F                           SUBQ.W      #4,A7
  308.        | 018C  48E7 000E                      MOVEM.L     A4-A6,-(A7)
  309.        | 0190  2A4E                           MOVEA.L     A6,A5
  310.        | 0192  49EE  0000-XX.2                LEA         _LinkerDB(A6),A4
  311.        | 0196  2F4E 000C                      MOVE.L      A6,000C(A7)
  312. ; 182: {
  313. ; 183:     CreatePPCTask(libbase, _fpterm);
  314.        | 019A  41FA  0000-XX.1                LEA         __fpterm(PC),A0
  315.        | 019E  2F08                           MOVE.L      A0,-(A7)
  316.        | 01A0  2F0D                           MOVE.L      A5,-(A7)
  317.        | 01A2  2C6F 0014                      MOVEA.L     0014(A7),A6
  318.        | 01A6  6100 FE82                      BSR.W       002A
  319.        | 01AA  504F                           ADDQ.W      #8,A7
  320. ; 184: }
  321.        | 01AC  4CDF 7000                      MOVEM.L     (A7)+,A4-A6
  322.        | 01B0  584F                           ADDQ.W      #4,A7
  323.        | 01B2  4E75                           RTS
  324. ; 185: 
  325. ; 186: 
  326. ; 187: 
  327. ; 188: 
  328. ; 189: 
  329. ; 190: 
  330. ; 191: __asm ULONG _LibInit( register __a0 APTR seglist,
  331. ; 192:                       register __d0 struct MyLibrary *libbase )
  332.        | 01B4  9EFC 003C                      SUBA.W      #003C,A7
  333.        | 01B8  48E7 0136                      MOVEM.L     D7/A2-A3/A5-A6,-(A7)
  334.        | 01BC  2640                           MOVEA.L     D0,A3
  335.        | 01BE  2A48                           MOVEA.L     A0,A5
  336.        | 01C0  2F4E 0014                      MOVE.L      A6,0014(A7)
  337. ; 193: {
  338. ; 194: #ifdef ONE_GLOBAL_SECTION
  339. ; 195:     long *reloc;
  340. ; 196: #endif
  341. ; 197:     long *sdata;
  342. ; 198:     char *ddata;
  343. ; 199:     long nrelocs;
  344. ; 200:     struct TagItem MyTags[3];
  345. ; 201:     extern __far long _ElfObject;
  346. ; 202:     struct Library *PPCLibBase;
  347. ; 203: 
  348. ; 204:     libbase->ml_SegList = (ULONG) seglist;
  349.        | 01C4  274D 0022                      MOVE.L      A5,0022(A3)
  350. ; 205: 
  351. ; 206:     /* init. library structure (since I don't do automatic data init.) */
  352. ; 207: #ifdef DEVICE
  353. ; 208:     libbase->ml_Lib.lib_Node.ln_Type = NT_DEVICE;
  354. ; 209: #else
  355. ; 210:     libbase->ml_Lib.lib_Node.ln_Type = NT_LIBRARY;
  356.        | 01C8  177C 0009 0008                 MOVE.B      #09,0008(A3)
  357. ; 211: #endif
  358. ; 212:     libbase->ml_Lib.lib_Node.ln_Name =  _LibName;
  359.        | 01CE  41F9  0000 0000-XX             LEA         __LibName,A0
  360.        | 01D4  2748 000A                      MOVE.L      A0,000A(A3)
  361. ; 213:     libbase->ml_Lib.lib_Flags = LIBF_SUMUSED | LIBF_CHANGED;
  362.        | 01D8  177C 0006 000E                 MOVE.B      #06,000E(A3)
  363. ; 214:     libbase->ml_Lib.lib_Version = MYVERSION;
  364.        | 01DE  41F9  0000 0000-XX             LEA         __LibVersion,A0
  365.        | 01E4  2008                           MOVE.L      A0,D0
  366.        | 01E6  3740 0014                      MOVE.W      D0,0014(A3)
  367. ; 215:     libbase->ml_Lib.lib_Revision = MYREVISION;
  368.        | 01EA  41F9  0000 0000-XX             LEA         __LibRevision,A0
  369.        | 01F0  2008                           MOVE.L      A0,D0
  370.        | 01F2  3740 0016                      MOVE.W      D0,0016(A3)
  371. ; 216:     libbase->ml_Lib.lib_IdString = (APTR) _LibID;
  372.        | 01F6  277C  0000 0000-XX  0018       MOVE.L      #__LibID,0018(A3)
  373. ; 217: #ifndef ONE_GLOBAL_SECTION
  374. ; 218:     libbase->ml_relocs = NULL;
  375.        | 01FE  42AB 002E                      CLR.L       002E(A3)
  376. ; 219:     libbase->ml_origbase = libbase;
  377.        | 0202  274B 0032                      MOVE.L      A3,0032(A3)
  378. ; 220:     sdata = (long *)_LibInitTab.it_FuncTable;
  379.        | 0206  2479  0000 0004-02             MOVEA.L     02.00000004,A2
  380. ; 221:     libbase->ml_numjmps = (long)&NUMJMPS;
  381.        | 020C  277C  0000 0000-XX  0036       MOVE.L      #_NUMJMPS,0036(A3)
  382. ; 222: #endif
  383. ; 223: 
  384. ; 224: 
  385. ; 225:     /* load the PPC ELF stub */
  386. ; 226:     MyTags[0].ti_Tag = PPCELFLOADTAG_ELFADDRESS;
  387.        | 0214  2F7C 8002 3301 0034            MOVE.L      #80023301,0034(A7)
  388. ; 227:     MyTags[0].ti_Data = (long)&_ElfObject;
  389.        | 021C  2F7C  0000 0000-XX  0038       MOVE.L      #__ElfObject,0038(A7)
  390. ; 228:     MyTags[1].ti_Tag = PPCELFLOADTAG_ELFNAME;
  391.        | 0224  2F7C 8002 3300 003C            MOVE.L      #80023300,003C(A7)
  392. ; 229:     MyTags[1].ti_Data = (long)_LibName;
  393.        | 022C  2F7C  0000 0000-XX  0040       MOVE.L      #__LibName,0040(A7)
  394. ; 230:     MyTags[2].ti_Tag = TAG_DONE;
  395.        | 0234  42AF 0044                      CLR.L       0044(A7)
  396. ; 231: 
  397. ; 232: 
  398. ; 233:     if ((PPCLibBase = OpenLibrary("ppc.library",0)) == NULL)
  399.        | 0238  43FA FDDC                      LEA         FDDC(PC),A1
  400.        | 023C  7000                           MOVEQ       #00,D0
  401.        | 023E  2C78 0004                      MOVEA.L     0004,A6
  402.        | 0242  4EAE FDD8                      JSR         FDD8(A6)
  403.        | 0246  2F40 0030                      MOVE.L      D0,0030(A7)
  404.        | 024A  4A80                           TST.L       D0
  405.        | 024C  2C6F 0014                      MOVEA.L     0014(A7),A6
  406.        | 0250  6606                           BNE.B       0258
  407. ; 234:        return NULL;
  408.        | 0252  7000                           MOVEQ       #00,D0
  409.        | 0254  6000 00E6                      BRA.W       033C
  410. ; 235: 
  411. ; 236:     if (libbase->ml_MyObject=PPCLoadObjectTagList(MyTags))
  412.        | 0258  41EF 0034                      LEA         0034(A7),A0
  413.        | 025C  2C6F 0030                      MOVEA.L     0030(A7),A6
  414.        | 0260  4EAE FE68                      JSR         FE68(A6)
  415.        | 0264  2740 003A                      MOVE.L      D0,003A(A3)
  416.        | 0268  2C6F 0014                      MOVEA.L     0014(A7),A6
  417.        | 026C  4A80                           TST.L       D0
  418.        | 026E  6738                           BEQ.B       02A8
  419. ; 237:     {
  420. ; 238:         struct PPCObjectInfo MyInfo;
  421. ; 239: 
  422. ; 240:         MyInfo.Address   =        0;
  423.        | 0270  42AF 0018                      CLR.L       0018(A7)
  424. ; 241:         MyInfo.Name      =        "__Entry";
  425.        | 0274  41FA FDAC                      LEA         FDAC(PC),A0
  426.        | 0278  2F48 001C                      MOVE.L      A0,001C(A7)
  427. ; 242:         MyTags[0].ti_Tag =        TAG_END;
  428.        | 027C  42AF 0034                      CLR.L       0034(A7)
  429. ; 243: 
  430. ; 244:         PPCGetObjectAttrs(libbase->ml_MyObject,
  431. ; 245:                           &MyInfo,
  432. ; 246:                           MyTags);
  433.        | 0280  2F0A                           MOVE.L      A2,-(A7)
  434.        | 0282  206B 003A                      MOVEA.L     003A(A3),A0
  435.        | 0286  43EF 001C                      LEA         001C(A7),A1
  436.        | 028A  2C6F 0034                      MOVEA.L     0034(A7),A6
  437.        | 028E  45EF 0038                      LEA         0038(A7),A2
  438.        | 0292  4EAE FF3A                      JSR         FF3A(A6)
  439.        | 0296  245F                           MOVEA.L     (A7)+,A2
  440. ; 247:         Set_ElfEntry(libbase, MyInfo.Address);
  441.        | 0298  202F 0018                      MOVE.L      0018(A7),D0
  442.        | 029C  2C4B                           MOVEA.L     A3,A6
  443.        | 029E  6100  0000-XX.1                BSR.W       _Set_ElfEntry
  444.        | 02A2  2C6F 0014                      MOVEA.L     0014(A7),A6
  445.        | 02A6  6012                           BRA.B       02BA
  446. ; 248:         
  447. ; 249:     }
  448. ; 250:     else
  449. ; 251:     {
  450. ; 252:        CloseLibrary(PPCLibBase);
  451.        | 02A8  226F 0030                      MOVEA.L     0030(A7),A1
  452.        | 02AC  2C78 0004                      MOVEA.L     0004,A6
  453.        | 02B0  4EAE FE62                      JSR         FE62(A6)
  454. ; 253:        return NULL;
  455.        | 02B4  7000                           MOVEQ       #00,D0
  456.        | 02B6  6000 0084                      BRA.W       033C
  457. ; 254:     }
  458. ; 255:     CloseLibrary(PPCLibBase);
  459.        | 02BA  226F 0030                      MOVEA.L     0030(A7),A1
  460.        | 02BE  2C78 0004                      MOVEA.L     0004,A6
  461.        | 02C2  4EAE FE62                      JSR         FE62(A6)
  462. ; 256: 
  463. ; 257: 
  464. ; 258:      /* Start of copy of global data after structure */
  465. ; 259:     ddata = (char *)libbase + MYLIBRARYSIZE; 
  466.        | 02C6  41EB 0040                      LEA         0040(A3),A0
  467.        | 02CA  2F48 004C                      MOVE.L      A0,004C(A7)
  468. ; 260: 
  469. ; 261:     sdata = (long *)&_Libmergeddata; /* where loadseg loaded the data */
  470.        | 02CE  45F9  0000 0000-XX             LEA         __Libmergeddata,A2
  471. ; 262:     memcpy(ddata, (void *)sdata, DATAWORDS*4);
  472.        | 02D4  41F9  0000 0000-XX             LEA         _NEWDATAL,A0
  473.        | 02DA  2008                           MOVE.L      A0,D0
  474.        | 02DC  2200                           MOVE.L      D0,D1
  475.        | 02DE  E581                           ASL.L       #2,D1
  476.        | 02E0  204A                           MOVEA.L     A2,A0
  477.        | 02E2  226F 004C                      MOVEA.L     004C(A7),A1
  478.        | 02E6  6002                           BRA.B       02EA
  479.        | 02E8  12D8                           MOVE.B      (A0)+,(A1)+
  480.        | 02EA  5381                           SUBQ.L      #1,D1
  481.        | 02EC  64FA                           BCC.B       02E8
  482. ; 263: 
  483. ; 264:     /* perform relocs if we want one global section for all programs */
  484. ; 265:     /* that have this lib open. If we want a global section for each */
  485. ; 266:     /* open, copy the relocs, and do them on each open call.         */
  486. ; 267:     sdata = sdata + DATAWORDS;
  487.        | 02EE  41F9  0000 0000-XX             LEA         _NEWDATAL,A0
  488.        | 02F4  2008                           MOVE.L      A0,D0
  489.        | 02F6  2200                           MOVE.L      D0,D1
  490.        | 02F8  E581                           ASL.L       #2,D1
  491.        | 02FA  D5C1                           ADDA.L      D1,A2
  492. ; 268:     nrelocs = *sdata;
  493.        | 02FC  2E12                           MOVE.L      (A2),D7
  494.        | 02FE  2C6F 0014                      MOVEA.L     0014(A7),A6
  495. ; 269: #ifdef ONE_GLOBAL_SECTION
  496. ; 270:     sdata++;
  497. ; 271:     while (nrelocs > 0)
  498. ; 272:     {
  499. ; 273:        reloc = (long *)((long)ddata + *sdata++);
  500. ; 274:        *reloc += (long)ddata;
  501. ; 275:        nrelocs--;
  502. ; 276:     }
  503. ; 277:     
  504. ; 278:     
  505. ; 279: #ifndef DEVICE
  506. ; 280:     if (__UserLibInit(libbase) != 0)
  507. ; 281:        return NULL; /* abort if user init failed */
  508. ; 282: #endif
  509. ; 283: 
  510. ; 284: #else
  511. ; 285:     if (nrelocs) 
  512.        | 0302  4A87                           TST.L       D7
  513.        | 0304  6734                           BEQ.B       033A
  514. ; 286:     {
  515. ; 287:       if ((libbase->ml_relocs = AllocMem((nrelocs * 4) + 4, MEMF_PUBLIC)) == NULL)
  516.        | 0306  2007                           MOVE.L      D7,D0
  517.        | 0308  E580                           ASL.L       #2,D0
  518.        | 030A  5880                           ADDQ.L      #4,D0
  519.        | 030C  7201                           MOVEQ       #01,D1
  520.        | 030E  2C78 0004                      MOVEA.L     0004,A6
  521.        | 0312  4EAE FF3A                      JSR         FF3A(A6)
  522.        | 0316  2740 002E                      MOVE.L      D0,002E(A3)
  523.        | 031A  4A80                           TST.L       D0
  524.        | 031C  2C6F 0014                      MOVEA.L     0014(A7),A6
  525.        | 0320  6604                           BNE.B       0326
  526. ; 288:         return 0;
  527.        | 0322  7000                           MOVEQ       #00,D0
  528.        | 0324  6016                           BRA.B       033C
  529. ; 289:       memcpy((void *)libbase->ml_relocs, (void *)sdata, (nrelocs * 4) + 4);
  530.        | 0326  2007                           MOVE.L      D7,D0
  531.        | 0328  E580                           ASL.L       #2,D0
  532.        | 032A  5880                           ADDQ.L      #4,D0
  533.        | 032C  204A                           MOVEA.L     A2,A0
  534.        | 032E  226B 002E                      MOVEA.L     002E(A3),A1
  535.        | 0332  6002                           BRA.B       0336
  536.        | 0334  12D8                           MOVE.B      (A0)+,(A1)+
  537.        | 0336  5380                           SUBQ.L      #1,D0
  538.        | 0338  64FA                           BCC.B       0334
  539. ; 290:     }
  540. ; 291: #endif
  541. ; 292: 
  542. ; 293:     return ( (ULONG) libbase );
  543.        | 033A  200B                           MOVE.L      A3,D0
  544. ; 294: }
  545.        | 033C  4CDF 6C80                      MOVEM.L     (A7)+,D7/A2-A3/A5-A6
  546.        | 0340  DEFC 003C                      ADDA.W      #003C,A7
  547.        | 0344  4E75                           RTS
  548. ; 295: 
  549. ; 296: LONG __asm _LibOpen( 
  550. ; 297: #ifdef DEVICE
  551. ; 298:                      register __d0 long unit,
  552. ; 299:                      register __a1 struct IORequest *ior,
  553. ; 300: #endif
  554. ; 301:                      register __a6 struct MyLibrary *libbase )
  555.        | 0346  9EFC 001C                      SUBA.W      #001C,A7
  556.        | 034A  48E7 0136                      MOVEM.L     D7/A2-A3/A5-A6,-(A7)
  557.        | 034E  2A4E                           MOVEA.L     A6,A5
  558.        | 0350  2F4E 0018                      MOVE.L      A6,0018(A7)
  559. ; 302: {
  560. ; 303: #ifndef ONE_GLOBAL_SECTION
  561. ; 304:     struct MyLibrary *origbase = libbase;
  562.        | 0354  264D                           MOVEA.L     A5,A3
  563. ; 305:     struct ExecBase *SysBase = *(struct ExecBase **)4;
  564.        | 0356  307C 0004                      MOVEA.W     #0004,A0
  565.        | 035A  2450                           MOVEA.L     (A0),A2
  566. ; 306:     char *newlib;
  567. ; 307:     long *sdata, *ddata, *reloc;
  568. ; 308:     long nrelocs;
  569. ; 309: #endif
  570. ; 310: 
  571. ; 311: 
  572. ; 312: char *a = 0;
  573.        | 035C  42AF 001C                      CLR.L       001C(A7)
  574. ; 313: *a = 0;
  575.        | 0360  206F 001C                      MOVEA.L     001C(A7),A0
  576.        | 0364  4210                           CLR.B       (A0)
  577. ; 314: 
  578. ; 315:     /* mark us as having another customer */
  579. ; 316:     libbase->ml_Lib.lib_OpenCnt++;
  580.        | 0366  526D 0020                      ADDQ.W      #1,0020(A5)
  581. ; 317: 
  582. ; 318:     /* clear delayed expunges (standard procedure) */
  583. ; 319:     libbase->ml_Lib.lib_Flags &= ~LIBF_DELEXP;
  584.        | 036A  08AD 0003 000E                 BCLR        #0003,000E(A5)
  585. ; 320: 
  586. ; 321: #ifndef ONE_GLOBAL_SECTION
  587. ; 322:     /* Allocate new lib base */
  588. ; 323:     newlib = AllocMem((long)(MYLIBRARYSIZE + 
  589.        | 0370  41F9  0000 0000-XX             LEA         _RESLEN,A0
  590.        | 0376  226D 0032                      MOVEA.L     0032(A5),A1
  591.        | 037A  2008                           MOVE.L      A0,D0
  592.        | 037C  D0A9 0036                      ADD.L       0036(A1),D0
  593.        | 0380  7240                           MOVEQ       #40,D1
  594.        | 0382  D081                           ADD.L       D1,D0
  595.        | 0384  2F40 0014                      MOVE.L      D0,0014(A7)
  596. ; 324:                              ((long)&RESLEN) + SIZEJMPTAB), 
  597. ; 325:                              MEMF_PUBLIC|MEMF_CLEAR);
  598.        | 0388  202F 0014                      MOVE.L      0014(A7),D0
  599.        | 038C  223C 0001 0001                 MOVE.L      #00010001,D1
  600.        | 0392  2C78 0004                      MOVEA.L     0004,A6
  601.        | 0396  4EAE FF3A                      JSR         FF3A(A6)
  602.        | 039A  2F40 002C                      MOVE.L      D0,002C(A7)
  603. ; 326: 
  604. ; 327:     if (newlib == NULL) goto error;
  605.        | 039E  2C6F 0018                      MOVEA.L     0018(A7),A6
  606.        | 03A2  6608                           BNE.B       03AC
  607.        | 03A4  2C6F 0018                      MOVEA.L     0018(A7),A6
  608.        | 03A8  6000 00F2                      BRA.W       049C
  609. ; 328:         
  610. ; 329:     /* copy over data */
  611. ; 330:     memcpy(newlib, (char *)libbase - SIZEJMPTAB, 
  612. ; 331:            (long)(MYLIBRARYSIZE + DATAWORDS*4 + SIZEJMPTAB));
  613.        | 03AC  206D 0032                      MOVEA.L     0032(A5),A0
  614.        | 03B0  224D                           MOVEA.L     A5,A1
  615.        | 03B2  93E8 0036                      SUBA.L      0036(A0),A1
  616.        | 03B6  4DF9  0000 0000-XX             LEA         _NEWDATAL,A6
  617.        | 03BC  200E                           MOVE.L      A6,D0
  618.        | 03BE  2200                           MOVE.L      D0,D1
  619.        | 03C0  E581                           ASL.L       #2,D1
  620.        | 03C2  D2A8 0036                      ADD.L       0036(A0),D1
  621.        | 03C6  7040                           MOVEQ       #40,D0
  622.        | 03C8  D280                           ADD.L       D0,D1
  623.        | 03CA  206F 002C                      MOVEA.L     002C(A7),A0
  624.        | 03CE  6002                           BRA.B       03D2
  625.        | 03D0  10D9                           MOVE.B      (A1)+,(A0)+
  626.        | 03D2  5381                           SUBQ.L      #1,D1
  627.        | 03D4  64FA                           BCC.B       03D0
  628. ; 332:     
  629. ; 333:     libbase = (struct MyLibrary *)(newlib+SIZEJMPTAB);
  630.        | 03D6  206D 0032                      MOVEA.L     0032(A5),A0
  631.        | 03DA  226F 002C                      MOVEA.L     002C(A7),A1
  632.        | 03DE  D3E8 0036                      ADDA.L      0036(A0),A1
  633.        | 03E2  2A49                           MOVEA.L     A1,A5
  634. ; 334:     libbase->ml_relocs = NULL;
  635.        | 03E4  42AD 002E                      CLR.L       002E(A5)
  636. ; 335:     
  637. ; 336:     /* perform relocs */       
  638. ; 337:     ddata = (long *)((char *)libbase + MYLIBRARYSIZE); 
  639.        | 03E8  41ED 0040                      LEA         0040(A5),A0
  640.        | 03EC  2F48 0024                      MOVE.L      A0,0024(A7)
  641. ; 338:     sdata = libbase->ml_origbase->ml_relocs;
  642.        | 03F0  206D 0032                      MOVEA.L     0032(A5),A0
  643.        | 03F4  2268 002E                      MOVEA.L     002E(A0),A1
  644.        | 03F8  2C6F 0018                      MOVEA.L     0018(A7),A6
  645.        | 03FC  2F49 0028                      MOVE.L      A1,0028(A7)
  646. ; 339:     if (sdata)
  647.        | 0400  6738                           BEQ.B       043A
  648. ; 340:     {
  649. ; 341:        nrelocs = *sdata++;
  650.        | 0402  206F 0028                      MOVEA.L     0028(A7),A0
  651.        | 0406  2E18                           MOVE.L      (A0)+,D7
  652.        | 0408  2F48 0028                      MOVE.L      A0,0028(A7)
  653.        | 040C  2C6F 0018                      MOVEA.L     0018(A7),A6
  654. ; 342:        while (nrelocs > 0)
  655.        | 0410  4A87                           TST.L       D7
  656.        | 0412  6F26                           BLE.B       043A
  657. ; 343:        {
  658. ; 344:           reloc = (long *)((long)ddata + *sdata++);
  659.        | 0414  202F 0024                      MOVE.L      0024(A7),D0
  660.        | 0418  2200                           MOVE.L      D0,D1
  661.        | 041A  206F 0028                      MOVEA.L     0028(A7),A0
  662.        | 041E  D298                           ADD.L       (A0)+,D1
  663.        | 0420  2F41 0020                      MOVE.L      D1,0020(A7)
  664.        | 0424  2F48 0028                      MOVE.L      A0,0028(A7)
  665. ; 345:           *reloc += (long)ddata;
  666.        | 0428  202F 0024                      MOVE.L      0024(A7),D0
  667.        | 042C  206F 0020                      MOVEA.L     0020(A7),A0
  668.        | 0430  D190                           ADD.L       D0,(A0)
  669. ; 346:           nrelocs--;
  670.        | 0432  5387                           SUBQ.L      #1,D7
  671.        | 0434  2C6F 0018                      MOVEA.L     0018(A7),A6
  672. ; 347:        }
  673.        | 0438  60D6                           BRA.B       0410
  674. ; 348:     }
  675. ; 349: 
  676. ; 350:     /* now we need to flush the cache because we copied the jmp table */
  677. ; 351:     if (SysBase->LibNode.lib_Version >= 36) 
  678.        | 043A  0C6A 0024 0014                 CMPI.W      #0024,0014(A2)
  679.        | 0440  2C6F 0018                      MOVEA.L     0018(A7),A6
  680.        | 0444  6508                           BCS.B       044E
  681. ; 352:       CacheClearU();
  682.        | 0446  2C78 0004                      MOVEA.L     0004,A6
  683.        | 044A  4EAE FD84                      JSR         FD84(A6)
  684. ; 353: 
  685. ; 354: #ifdef DEVICE
  686. ; 355:     ior->io_Device = (struct Device *)libbase; /* local copy of libary base */
  687. ; 356: #endif
  688. ; 357: 
  689. ; 358:     if (__libfpinit(libbase) || 
  690.        | 044E  2C4D                           MOVEA.L     A5,A6
  691.        | 0450  6100 FD0E                      BSR.W       0160
  692.        | 0454  2C6F 0018                      MOVEA.L     0018(A7),A6
  693.        | 0458  4A80                           TST.L       D0
  694.        | 045A  660E                           BNE.B       046A
  695. ; 359: #ifdef DEVICE
  696. ; 360:         __UserDevInit(unit, ior, libbase) != 0
  697. ; 361: #else
  698. ; 362:         __UserLibInit(libbase) != 0
  699.        | 045C  2C4D                           MOVEA.L     A5,A6
  700.        | 045E  6100  0000-XX.1                BSR.W       ___UserLibInit
  701.        | 0462  4A80                           TST.L       D0
  702.        | 0464  2C6F 0018                      MOVEA.L     0018(A7),A6
  703.        | 0468  6744                           BEQ.B       04AE
  704. ; 363: #endif
  705. ; 364:        )
  706. ; 365:     {
  707. ; 366:        __libfpterm(libbase);
  708.        | 046A  2C4D                           MOVEA.L     A5,A6
  709.        | 046C  6100 FD1C                      BSR.W       018A
  710. ; 367:        FreeMem(newlib, (long)(MYLIBRARYSIZE + 
  711.        | 0470  41F9  0000 0000-XX             LEA         _RESLEN,A0
  712.        | 0476  226D 0032                      MOVEA.L     0032(A5),A1
  713.        | 047A  2008                           MOVE.L      A0,D0
  714.        | 047C  D0A9 0036                      ADD.L       0036(A1),D0
  715.        | 0480  7240                           MOVEQ       #40,D1
  716.        | 0482  D081                           ADD.L       D1,D0
  717.        | 0484  2F40 0014                      MOVE.L      D0,0014(A7)
  718. ; 368:                        ((long)&RESLEN) + SIZEJMPTAB));
  719.        | 0488  226F 002C                      MOVEA.L     002C(A7),A1
  720.        | 048C  202F 0014                      MOVE.L      0014(A7),D0
  721.        | 0490  2C78 0004                      MOVEA.L     0004,A6
  722.        | 0494  4EAE FF2E                      JSR         FF2E(A6)
  723.        | 0498  2C6F 0018                      MOVEA.L     0018(A7),A6
  724. ; 369: error:
  725. ; 370:        origbase->ml_origbase->ml_Lib.lib_OpenCnt--;
  726.        | 049C  206B 0032                      MOVEA.L     0032(A3),A0
  727.        | 04A0  3028 0020                      MOVE.W      0020(A0),D0
  728.        | 04A4  5340                           SUBQ.W      #1,D0
  729.        | 04A6  3140 0020                      MOVE.W      D0,0020(A0)
  730. ; 371:        return NULL; /* abort if user init failed */
  731.        | 04AA  7000                           MOVEQ       #00,D0
  732.        | 04AC  6002                           BRA.B       04B0
  733. ; 372:     }
  734. ; 373: 
  735. ; 374: #else
  736. ; 375: #ifdef DEVICE
  737. ; 376:     if (__UserDevInit(unit, ior, libbase) != 0)
  738. ; 377:     {
  739. ; 378:         libbase->ml_Lib.lib_OpenCnt--;
  740. ; 379:         return NULL;
  741. ; 380:     }    
  742. ; 381: #endif
  743. ; 382: #endif
  744. ; 383: 
  745. ; 384:     return ( (LONG) libbase );
  746.        | 04AE  200D                           MOVE.L      A5,D0
  747. ; 385: }
  748.        | 04B0  4CDF 6C80                      MOVEM.L     (A7)+,D7/A2-A3/A5-A6
  749.        | 04B4  DEFC 001C                      ADDA.W      #001C,A7
  750.        | 04B8  4E75                           RTS
  751. ; 386: 
  752. ; 387: ULONG __asm _LibClose( 
  753. ; 388: #ifdef DEVICE
  754. ; 389:                        register __a1 struct IORequest *ior,
  755. ; 390: #endif                       
  756. ; 391:                        register __a6 struct MyLibrary *libbase )
  757.        | 04BA  514F                           SUBQ.W      #8,A7
  758.        | 04BC  48E7 0116                      MOVEM.L     D7/A3/A5-A6,-(A7)
  759.        | 04C0  2A4E                           MOVEA.L     A6,A5
  760.        | 04C2  2F4E 0014                      MOVE.L      A6,0014(A7)
  761. ; 392: {
  762. ; 393:     ULONG retval = 0;
  763.        | 04C6  7E00                           MOVEQ       #00,D7
  764. ; 394:     
  765. ; 395: #ifndef ONE_GLOBAL_SECTION
  766. ; 396:     struct MyLibrary *origbase;
  767. ; 397: 
  768. ; 398:     if (libbase != libbase->ml_origbase)
  769.        | 04C8  206D 0032                      MOVEA.L     0032(A5),A0
  770.        | 04CC  B1CD                           CMPA.L      A5,A0
  771.        | 04CE  2C6F 0014                      MOVEA.L     0014(A7),A6
  772.        | 04D2  6740                           BEQ.B       0514
  773. ; 399:     {
  774. ; 400: #ifdef DEVICE
  775. ; 401:        __UserDevCleanup(ior, libbase);
  776. ; 402: #else
  777. ; 403:        __UserLibCleanup(libbase);
  778.        | 04D4  2C4D                           MOVEA.L     A5,A6
  779.        | 04D6  6100  0000-XX.1                BSR.W       ___UserLibCleanup
  780. ; 404: #endif
  781. ; 405:        __libfpterm(libbase);
  782.        | 04DA  2C4D                           MOVEA.L     A5,A6
  783.        | 04DC  6100 FCAC                      BSR.W       018A
  784. ; 406:        origbase = libbase->ml_origbase;
  785.        | 04E0  266D 0032                      MOVEA.L     0032(A5),A3
  786. ; 407:        FreeMem((char *)libbase-SIZEJMPTAB, 
  787.        | 04E4  206D 0032                      MOVEA.L     0032(A5),A0
  788.        | 04E8  224D                           MOVEA.L     A5,A1
  789.        | 04EA  93E8 0036                      SUBA.L      0036(A0),A1
  790.        | 04EE  2F49 0010                      MOVE.L      A1,0010(A7)
  791. ; 408:                (long)(MYLIBRARYSIZE + ((long)&RESLEN)+SIZEJMPTAB));
  792.        | 04F2  41F9  0000 0000-XX             LEA         _RESLEN,A0
  793.        | 04F8  226D 0032                      MOVEA.L     0032(A5),A1
  794.        | 04FC  2008                           MOVE.L      A0,D0
  795.        | 04FE  D0A9 0036                      ADD.L       0036(A1),D0
  796.        | 0502  7240                           MOVEQ       #40,D1
  797.        | 0504  D081                           ADD.L       D1,D0
  798.        | 0506  226F 0010                      MOVEA.L     0010(A7),A1
  799.        | 050A  2C78 0004                      MOVEA.L     0004,A6
  800.        | 050E  4EAE FF2E                      JSR         FF2E(A6)
  801. ; 409:        libbase = origbase;
  802.        | 0512  2A4B                           MOVEA.L     A3,A5
  803. ; 410:     }
  804. ; 411: #else
  805. ; 412: #ifdef DEVICE
  806. ; 413:     __UserDevCleanup(ior, libbase);
  807. ; 414: #endif
  808. ; 415: #endif
  809. ; 416: 
  810. ; 417:     if (( --libbase->ml_Lib.lib_OpenCnt == 0 ) &&
  811.        | 0514  536D 0020                      SUBQ.W      #1,0020(A5)
  812.        | 0518  2C6F 0014                      MOVEA.L     0014(A7),A6
  813.        | 051C  6614                           BNE.B       0532
  814. ; 418:                         ( libbase->ml_Lib.lib_Flags & LIBF_DELEXP ))
  815.        | 051E  082D 0003 000E                 BTST        #0003,000E(A5)
  816.        | 0524  2C6F 0014                      MOVEA.L     0014(A7),A6
  817.        | 0528  6708                           BEQ.B       0532
  818. ; 419:     {
  819. ; 420:         /* no more people have me open,
  820. ; 421:          * and I have a delayed expunge pending
  821. ; 422:          */
  822. ; 423:          retval = _LibExpunge( libbase ); /* return segment list        */
  823.        | 052A  2C4D                           MOVEA.L     A5,A6
  824.        | 052C  6100 000E                      BSR.W       053C
  825.        | 0530  2E00                           MOVE.L      D0,D7
  826. ; 424:     }
  827. ; 425: 
  828. ; 426:     return (retval);
  829.        | 0532  2007                           MOVE.L      D7,D0
  830. ; 427: }
  831.        | 0534  4CDF 6880                      MOVEM.L     (A7)+,D7/A3/A5-A6
  832.        | 0538  504F                           ADDQ.W      #8,A7
  833.        | 053A  4E75                           RTS
  834. ; 428: 
  835. ; 429: ULONG __asm _LibExpunge( register __a6 struct MyLibrary *libbase )
  836.        | 053C  594F                           SUBQ.W      #4,A7
  837.        | 053E  48E7 2316                      MOVEM.L     D2/D6-D7/A3/A5-A6,-(A7)
  838.        | 0542  2A4E                           MOVEA.L     A6,A5
  839.        | 0544  2F4E 0018                      MOVE.L      A6,0018(A7)
  840. ; 430: {
  841. ; 431:     ULONG seglist = 0;
  842.        | 0548  7E00                           MOVEQ       #00,D7
  843. ; 432:     LONG  libsize;
  844. ; 433:     struct Library *PPCLibBase;
  845. ; 434: 
  846. ; 435: #ifndef ONE_GLOBAL_SECTION
  847. ; 436:     libbase = libbase->ml_origbase;
  848.        | 054A  204D                           MOVEA.L     A5,A0
  849.        | 054C  2A68 0032                      MOVEA.L     0032(A0),A5
  850. ; 437: #endif
  851. ; 438: 
  852. ; 439:     libbase->ml_Lib.lib_Flags |= LIBF_DELEXP;
  853.        | 0550  08ED 0003 000E                 BSET        #0003,000E(A5)
  854. ; 440:     if ( libbase->ml_Lib.lib_OpenCnt == 0 )
  855.        | 0556  4A6D 0020                      TST.W       0020(A5)
  856.        | 055A  2C6F 0018                      MOVEA.L     0018(A7),A6
  857.        | 055E  6600 0082                      BNE.W       05E2
  858. ; 441:     {
  859. ; 442:         /* really expunge: remove libbase and freemem        */
  860. ; 443: #ifndef ONE_GLOBAL_SECTION
  861. ; 444:         if (libbase->ml_relocs)
  862.        | 0562  202D 002E                      MOVE.L      002E(A5),D0
  863.        | 0566  6718                           BEQ.B       0580
  864. ; 445:            FreeMem(libbase->ml_relocs, (*libbase->ml_relocs * 4) + 4);
  865.        | 0568  206D 002E                      MOVEA.L     002E(A5),A0
  866.        | 056C  2010                           MOVE.L      (A0),D0
  867.        | 056E  2200                           MOVE.L      D0,D1
  868.        | 0570  E581                           ASL.L       #2,D1
  869.        | 0572  5881                           ADDQ.L      #4,D1
  870.        | 0574  2248                           MOVEA.L     A0,A1
  871.        | 0576  2001                           MOVE.L      D1,D0
  872.        | 0578  2C78 0004                      MOVEA.L     0004,A6
  873.        | 057C  4EAE FF2E                      JSR         FF2E(A6)
  874. ; 446: #else
  875. ; 447:         __UserLibCleanup(libbase);
  876. ; 448: #endif
  877. ; 449: 
  878. ; 450:         if (PPCLibBase = OpenLibrary("ppc.library",0))
  879.        | 0580  43FA FA94                      LEA         FA94(PC),A1
  880.        | 0584  7000                           MOVEQ       #00,D0
  881.        | 0586  2C78 0004                      MOVEA.L     0004,A6
  882.        | 058A  4EAE FDD8                      JSR         FDD8(A6)
  883.        | 058E  2640                           MOVEA.L     D0,A3
  884.        | 0590  2C6F 0018                      MOVEA.L     0018(A7),A6
  885.        | 0594  200B                           MOVE.L      A3,D0
  886.        | 0596  6714                           BEQ.B       05AC
  887. ; 451:         {
  888. ; 452:            PPCUnLoadObject(libbase->ml_MyObject);
  889.        | 0598  206D 003A                      MOVEA.L     003A(A5),A0
  890.        | 059C  2C4B                           MOVEA.L     A3,A6
  891.        | 059E  4EAE FFDC                      JSR         FFDC(A6)
  892. ; 453:            CloseLibrary(PPCLibBase);
  893.        | 05A2  224B                           MOVEA.L     A3,A1
  894.        | 05A4  2C78 0004                      MOVEA.L     0004,A6
  895.        | 05A8  4EAE FE62                      JSR         FE62(A6)
  896. ; 454:         }
  897. ; 455:         
  898. ; 456:         seglist = libbase->ml_SegList;
  899.        | 05AC  2E2D 0022                      MOVE.L      0022(A5),D7
  900. ; 457: 
  901. ; 458:         Remove( (struct Node *) libbase);
  902.        | 05B0  224D                           MOVEA.L     A5,A1
  903.        | 05B2  2C78 0004                      MOVEA.L     0004,A6
  904.        | 05B6  4EAE FF04                      JSR         FF04(A6)
  905. ; 459: 
  906. ; 460:         libsize = libbase->ml_Lib.lib_NegSize + libbase->ml_Lib.lib_PosSize;
  907.        | 05BA  7000                           MOVEQ       #00,D0
  908.        | 05BC  302D 0010                      MOVE.W      0010(A5),D0
  909.        | 05C0  7200                           MOVEQ       #00,D1
  910.        | 05C2  322D 0012                      MOVE.W      0012(A5),D1
  911.        | 05C6  2400                           MOVE.L      D0,D2
  912.        | 05C8  D481                           ADD.L       D1,D2
  913.        | 05CA  2C02                           MOVE.L      D2,D6
  914. ; 461:         FreeMem( (char *) libbase - libbase->ml_Lib.lib_NegSize,(LONG) libsize );
  915.        | 05CC  204D                           MOVEA.L     A5,A0
  916.        | 05CE  7000                           MOVEQ       #00,D0
  917.        | 05D0  302D 0010                      MOVE.W      0010(A5),D0
  918.        | 05D4  91C0                           SUBA.L      D0,A0
  919.        | 05D6  2248                           MOVEA.L     A0,A1
  920.        | 05D8  2006                           MOVE.L      D6,D0
  921.        | 05DA  2C78 0004                      MOVEA.L     0004,A6
  922.        | 05DE  4EAE FF2E                      JSR         FF2E(A6)
  923. ; 462:     }
  924. ; 463: 
  925. ; 464:     /* return NULL or real seglist                                */
  926. ; 465:     return ( (ULONG) seglist );
  927.        | 05E2  2007                           MOVE.L      D7,D0
  928. ; 466: }
  929.        | 05E4  4CDF 68C4                      MOVEM.L     (A7)+,D2/D6-D7/A3/A5-A6
  930.        | 05E8  584F                           ADDQ.W      #4,A7
  931.        | 05EA  4E75                           RTS
  932.  
  933. SECTION 01 "__MERGED" 00000084 BYTES
  934.  
  935. SECTION 02 "data" 00000010 BYTES
  936. 0000 00000040-XX _RESLEN+00000040
  937. 0004 00000000-XX __LibFuncTab
  938. OFFSETS 0008 THROUGH 000B CONTAIN ZERO
  939. 000C 000001B4-00 00.000001B4
  940.